/*
 * Created on Feb 11, 2005
 * Created by dfhuynh
 */
package edu.mit.simile.longwell.schema;

import java.util.Set;

/**
 * @author dfhuynh
 */
public interface IStructuredProperty {
	final static public int	s_type_literal 	= 0;
	final static public int	s_type_numeric 	= 1;
	final static public int	s_type_integer 	= 2;
	final static public int	s_type_boolean 	= 3;
	final static public int	s_type_dateTime = 4;
	final static public int	s_type_uri 		= 5;
	// Do not change the above
	final static public int	s_type_max 		= 6;
	
	/**
	 * Answer the URI of this structured property.
	 * 
	 * @return
	 */
	public String getURI();
	
	/**
	 * Answer whether this property has been specified explicitly, or guessed.
	 * 
	 * @return
	 */
	public boolean isExplicit();
	
	/**
	 * Answer a set of IStructuredClass'es that are the domain of this property.
	 * @return
	 */
	public Set getDomainClasses();
	
	/**
	 * Answer a set of IStructuredSchema's that this property belongs to.
	 * 
	 * @return
	 */
	public Set getSchemas();
	
	/**
	 * Answer the label of this property in the given locale.
	 * 
	 * @param locale
	 * @return
	 */
	public String getLabel(String locale);
	
	/**
	 * Answer how many statements contain this property.
	 * 
	 * @return
	 */
	public long countOccurrences();
	
	
	/**
	 * Answer a number from 0 to 1 estimating how unique the values of this
	 * property are. Smaller results imply less unique.
	 * 
	 * @return
	 */
	public float getUniqueness();
	
	/**
	 * Answer a number between 0 and 1 indicating confidence that this property
	 * is of the given type.
	 * 
	 * @param type
	 * @return
	 */
	public float getTypeConfidence(int type);
}
